今天要學習畫面之間如何利用 segue 傳遞參數,假設我們已經有兩個 View Controller,在第一個畫面的 Text Field 輸入字串,按下 Button 要能夠在第二個畫面的 Label 顯示。
先在兩個 View Controller 建立 segue,所需要的元件如圖所示,並為 Button 寫 IBAction 函數、其它元件取上 IBOutlet 屬性名稱。
在 SecondViewController.swift 內宣告一個全域字串。
var str: String?
在 ViewController.swift 實作 prepare 函數。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toSecondView" {
let vc = segue.destination as! SecondViewController
vc.str = inputString.text
}
}
在 SecondViewController.swift 的 viewDidLoad 中寫上 outputString.text = str。
override func viewDidLoad() {
super.viewDidLoad()
outputString.text = str
}
prepare 函數是當 segue 啟動時會呼叫的函數,利用 segue.destination 得到 SecondViewController 的實體,然後將 SecondViewController.swift 內的 str 設成 inputString.text,進入第二個畫面時再將 str 給 outputString.text。
我們不能直接在 prepare 函數內寫 vc.outputString.text = inputString.text,原因是屬性名稱為 outputString 的元件還沒有產生,所以先傳給 str 再將 str 指定給 outputString.text。